package meta

import (
	dbLayer "gitee.com/Cookie_XiaoD/go-filestore-server/db"
	"gitee.com/Cookie_XiaoD/go-filestore-server/db/entities"
	"log"
	"gitee.com/Cookie_XiaoD/go-filestore-server/util"
)

type FileMeta struct {
	//文件的sha1摘要
	FileHash string `json:"fileHash"`
	//文件名
	FileName string `json:"fileName"`
	//文件字节数
	FileSize int64 `json:"fileSize"`
	//文件路径
	Location string `json:"location"`
	//上传时间
	UploadAt string `json:"uploadAt"`
}

//GetFileMeta 获取文件元信息
func GetFileMeta(fileSha1 string) *FileMeta {
	return fileMetas[fileSha1]
}

//GetFileMetaDB 获取文件元信息
func GetFileMetaDB(fileSha1 string) (*FileMeta,error) {
	file, err := dbLayer.GetFileMeta(fileSha1)
	if err != nil {
		log.Printf("获取文件信息失败：%v", err.Error())
		return nil,err
	}
	if file==nil{
		return nil,util.NoResultError
	}
	return &FileMeta{
		FileSize: file.FileSize,
		FileName: file.FileName,
		FileHash: file.FileHash,
		Location: file.FileAddr,
		UploadAt: file.UpdateAt,
	},nil
}

//UpdateFileMeta 更新文件元信息
func UpdateFileMeta(fileMeta *FileMeta) {
	fileMetas[fileMeta.FileHash] = fileMeta
}

//UpdateFileMeta 更新文件元信息
func UpdateFileMetaDB(fileMeta *FileMeta) bool {
	entity := &entities.AddFileEntity{
		FileAddr: fileMeta.Location, FileSize: fileMeta.FileSize, FileHash: fileMeta.FileHash, FileName: fileMeta.FileName,
	}
	result, err := dbLayer.AddFileInfo(entity)
	if err != nil {
		log.Println(err.Error())
	}
	return result
}

//DeleteFileMeta 删除文件元信息
func DeleteFileMeta(fileHash string) {
	delete(fileMetas, fileHash)
}

//key是文件的sha1摘要
var fileMetas map[string]*FileMeta

func init() {
	fileMetas = make(map[string]*FileMeta)
}
